import os
from datetime import datetime


def get_direct_subdirectories(directory):
    """
    获取目录下的直接子文件夹（不递归）。

    :param directory: 要检查的目录路径。
    """
    try:
        for entry in os.scandir(directory):
            if entry.is_dir():
                yield entry.path
    except FileNotFoundError:
        print(f"目录 {directory} 不存在")
    except PermissionError:
        print(f"没有权限访问目录 {directory}")


def get_non_recursive_folders(directory):
    """
    获取指定目录下非递归的文件夹名称列表
    :param directory: 指定的目录路径
    :return: 非递归的文件夹名称列表
    """
    folder_names = []
    try:
        # 遍历目录下的所有条目
        for entry in os.scandir(directory):
            if entry.is_dir():
                # 如果条目是文件夹，则将其名称添加到列表中
                folder_names.append(entry.name)
    except FileNotFoundError:
        print(f"指定的目录 {directory} 未找到。")
    return folder_names


def get_all_files(directory, extension=None):
    """
    获取目录下所有文件的路径。

    :param directory: 要遍历的目录路径。
    :param extension: 可选参数，指定要匹配的文件扩展名（如 '.txt'）。
    """
    for dirpath, _, filenames in os.walk(directory):
        for filename in filenames:
            if extension is None or filename.endswith(extension):
                full_path = os.path.join(dirpath, filename)
                yield full_path


def get_files_containing_substring(directory, substring):
    file_name = None
    # 遍历指定目录下的所有文件
    for filename in os.listdir(directory):
        # 构建完整的文件路径
        full_path = os.path.join(directory, filename)
        # 检查是否为文件
        if os.path.isfile(full_path):
            # 检查文件名是否包含指定的子字符串
            if substring in filename:
                file_name = full_path
    return file_name


def get_timestamp_milliseconds(t_str):
    """
    将ISO 8601时间戳字符串转为13位毫秒级时间戳
    :param t_str: ISO 8601时间戳字符串
    :return: 13位毫秒级时间戳
    """
    # t_str = data['timestamp']
    # 解析 ISO 8601 时间字符串为 datetime 对象
    dt = datetime.strptime(t_str, "%Y-%m-%dT%H:%M:%S.%f")
    # 将 datetime 对象转换为秒级时间戳
    timestamp_seconds = dt.timestamp()
    # 将秒级时间戳转换为毫秒级时间戳
    timestamp_milliseconds = int(timestamp_seconds * 1000)
    return timestamp_milliseconds